package com.example;

import org.apache.commons.io.FileUtils;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zhuangxl
 * @description 从无到有生成图片
 * @since 2021-07-09 15:08
 */
public class MyDemo {

    public static void main(String[] args) throws Exception{

        // 创建图像
        BufferedImage bufferedImage = new BufferedImage(595, 842,BufferedImage.TYPE_3BYTE_BGR);

        // 创建新图层
        Graphics2D graphics = (Graphics2D)bufferedImage.getGraphics();

        // 设置图层文字属性
        Font font = new Font("微软雅黑", Font.BOLD, 16);
        graphics.setFont(font);
        graphics.setColor(Color.black);

        // 消除锯齿，文字更加清晰
        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        graphics.setBackground(Color.white);
        // 清除指定矩形的背景色，显示绘图的背景色
        graphics.clearRect(0, 0, 595, 842);

        // 画图
        graphics.drawString("附件一：", 30, 20);

        // 读取图片
        BufferedImage bi = ImageIO.read(new File("D:/1/2.jpg"));
        // 图片水平旋转
        bi = DrawImageUtil.horizontalRotate(bi);
        // 图片缩放
        bi = DrawImageUtil.calcScale(bi, 390, 595);

        graphics.drawImage(bi, 30,30, bi.getWidth(), bi.getHeight(), null);

        graphics.drawString("附件二：", 30, 440);

        // 读取图片
        bi = ImageIO.read(new File("D:/1/3.jpg"));
        // 图片水平旋转
        bi = DrawImageUtil.horizontalRotate(bi);
        // 图片缩放
        bi = DrawImageUtil.calcScale(bi, 390, 595);

        graphics.drawImage(bi, 30,450, bi.getWidth(), bi.getHeight(), null);

        graphics.dispose();

        // 保存图片
        ImageIO.write(bufferedImage, "png", new File("D:/1/myFirstImage.png"));

        // 保存pdf
        byte[] bytes = ConvertPdfUtil.img2pdf(bufferedImage, "png");
        FileUtils.writeByteArrayToFile(new File("D:/1/myFirstImage.pdf"), bytes, 0, bytes.length);

        // 需要合并的pdf文件集合
        byte[] firstPdf = FileUtils.readFileToByteArray(new File("D:/1/1.pdf"));
        List<byte[]> pdfList = new ArrayList<>();
        pdfList.add(firstPdf);
        pdfList.add(bytes);

        // pdf合并
        byte[] finalBytes = ConvertPdfUtil.mergePDF(pdfList);

        // 合并后的pdf保存
        FileUtils.writeByteArrayToFile(new File("D:/1/myFinal.pdf"), finalBytes, 0, finalBytes.length);
    }
}
